let timeout = null;
export function throttle(func, wait = 500, immediate = true) {
    // 1.定义一个定时器, 保存上一次的定时器
    let timer = null;
    let isInvoke = false; //记录立即执行是否已执行过

    // 2.真正执行的函数
    const _debounce = function (...args) {
        // 取消上一次的定时器
        if (timer) clearTimeout(timer);

        // 判断是否需要立即执行
        if (immediate && !isInvoke) {
            func.apply(this, args);
            isInvoke = true;
        } else {
            // 延迟执行
            timer = setTimeout(() => {
                // 外部传入的真正要执行的函数
                func.apply(this, args);

                //没有这个步骤时，只有第一次输入是立即执行，即使后面延迟执行后再输入也是延迟执行；
                // 有这个步骤时，第一次输入时立即执行，后面延迟执行后再输入也会有立即执行
                isInvoke = false
                timer = null
            }, wait);
        }
    };
    return _debounce;
}